package com.study.example.gameserver.module.ranklist.handler;

import com.sparrow.common.handler.Handler;
import com.sparrow.common.ranklist.RankElement;
import com.sparrow.example_message.rank.vo.RankVo;
import com.study.example.gameserver.module.ranklist.domain.RankType;

import java.util.ArrayList;
import java.util.List;

public abstract class RankHandler<D> implements Handler<RankHandler, RankType> {

    public abstract D decode(String rankDataStr);

    public abstract String encode(D d);

    public abstract int compare(Object a, Object b);

    public List<RankVo> toRankVoList(List<RankElement> itemList) {
        List<RankVo> list = new ArrayList<>();
        for (RankElement e : itemList) {
            RankVo vo = new RankVo();
            vo.setRank(e.getRank());
            vo.setPlayerId(e.getRankElementId());
            vo.setRank(e.getRank());
            fillRankVo(e, vo);
            list.add(vo);
        }
        return list;
    }

    protected abstract void fillRankVo(RankElement e, RankVo rankVo);
}
